const { User } = require('../model')
const jwt = require('../util/jwt')
const { jwtSecret,jwt_access_expire,jwt_refresh_expire } = require('../config/config.default')

// 用户登录
exports.login = async (req, res, next) => {
  try {
    // 1. 数据验证
    // 2. 生成 token
    const user = req.user.toJSON()
    const token = await jwt.sign({
      userId: user._id
    }, jwtSecret, {
      expiresIn: jwt_access_expire
    })

    // 生成refresh_token
    const refresh_token=await jwt.sign({
      userId:user._id
    },jwtSecret,{
      expiresIn:jwt_refresh_expire
    })
    // 3. 发送成功响应（包含 token 的用户信息）
    delete user.password
    res.status(200).json({
      ...user,
      token,
      token_expire:jwt_access_expire,
      refresh_token,
      refresh_expire:jwt_refresh_expire
    })
  } catch (err) {
    next(err)
  }
}
/**
 * 根据refresh_token刷新token
 * add by lc
 * add at 2021-08-05
 * 
 * @param {*} req 
 * @param {*} res 
 * @param {*} next 
 */
exports.refreshToken=async (req,res,next)=>{
  let refresh_token = req.body.refresh_token
  refresh_token = refresh_token
  ? refresh_token.split('Bearer ')[1]
  : null

  if (!refresh_token) {
    res.status(401).end()
  }else{
    try {
      const decodedToken = await jwt.verify(refresh_token, jwtSecret)
      // 生成新的token
      const token = await jwt.sign({
        userId: decodedToken.userId
      }, jwtSecret, {
        expiresIn: jwt_access_expire
      })
      res.status(200).json({
        token,
        token_expire:jwt_access_expire
      })
    } catch (err) {
      res.status(401).end()
      next(err)
    }
  }
}
// 用户注册
exports.register = async (req, res, next) => {
  try {
    let user = new User(req.body.user)
    await user.save()
    // 为了防止注册用户成功后返回的用户数据中携带密码，
    // 需要把密码字段去除，对于js删除对象属性可以使用delete，
    // 但是返回的是mongoose的数据，并不直接支持delete
    // 可以把mongoose对象格式的数据转换成json格式
    user = user.toJSON()

    delete user.password

    res.status(201).json({
      user
    })
  } catch (err) {
    next(err)
  }
}

// 获取当前登录用户
exports.getCurrentUser = async (req, res, next) => {
  try {
    res.status(200).json({
      user: req.user
    })
  } catch (err) {
    next(err)
  }
}

// 更新当前登录用户
exports.updateCurrentUser = async (req, res, next) => {
  try {
    // 处理请求
    res.send('updateCurrentUser')
  } catch (err) {
    next(err)
  }
}

// 获取指定用户资料
exports.getUserProfile = async (req, res, next) => {
  try {
    // 处理请求
    res.send('getUserProfile')
  } catch (err) {
    next(err)
  }
}

// 关注用户
exports.followUser = async (req, res, next) => {
  try {
    // 处理请求
    res.send('followUser')
  } catch (err) {
    next(err)
  }
}

// 取消关注用户
exports.unfollowUser = async (req, res, next) => {
  try {
    // 处理请求
    res.send('unfollowUser')
  } catch (err) {
    next(err)
  }
}
